Problem
Count on a tree
Description
给定一棵个节点的树,每个点有一个权值,对于个询问,你需要回答和这两个节点间第小的点权。其中是上一个询问的答案,初始为,即第一个询问的是明文。
Input
第一行两个整数。
第二行有个整数,其中第个整数表示点的权值。
后面行每行个整数,表示点到点有一条边。
最后行每行个整数,表示一组询问。
Output
Sample Input
1 | 8 5 |
Sample Output
1 | 2 |
Hint
标签:LCA
主席树
Solution
这是一个区间第小的问题,所以可以很自然的想到值域主席树。但是此题将区间移到了树上,于是写树上主席树。
在解区间第小的时候,对于每次询问区间,我们需要找到位置的线段树和位置的线段树,然后递归的时候用个数相减。对于这道题,我们把每个结点到根的那条链作为一个序列,用区间第小的方法存储,然后找到和的(假定它为),递归的时候计算左区间数的个数,即
即。
写的时候注意强制在线的操作方式和读入数后先离散化。
Code
1 |
|